package com.distributor;

import java.util.HashMap;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;

public class SeparatedListAdapter extends BaseAdapter
{
	public final HashMap<String, Adapter> section_item=new HashMap<String, Adapter>();
	public final ArrayAdapter<String> header;
	public final static int TYPE_SECTION_HEADER=0;
	
	public SeparatedListAdapter(Context context)
	{
		header=new ArrayAdapter<String>(context, R.layout.list_header);
	}
	
	public void addSection(String section,Adapter adapter)
	{
		this.header.add(section);
		this.section_item.put(section, adapter);
	}
	
	public int getCount() 
	{
		  // total together all sections, plus one for each section header
		int total = 0;
        for (Adapter adapter : this.section_item.values())
            total += adapter.getCount() + 1;
        return total;
	}

	public Object getItem(int position)
	{
		// TODO Auto-generated method stub
		 for (Object section : this.section_item.keySet())
         {
             Adapter adapter = section_item.get(section);
             int size = adapter.getCount() + 1;

             // check if position inside this section
             if (position == 0) 
             	return section;
             if (position < size) 
             	return adapter.getItem(position - 1);

             // otherwise jump into next section
             position -= size;
         }
		return null;
	}

	
	@Override
	public int getViewTypeCount()
	{

        // assume that headers count as one, then total all sections
        int total = 1;
        for (Adapter adapter : this.section_item.values())
            total += adapter.getViewTypeCount();
        return total;
	}
	
	

	@Override
	public int getItemViewType(int position) 
	{
		int type = 1;
        for (Object section : this.section_item.keySet())
            {
                Adapter adapter = section_item.get(section);
                int size = adapter.getCount() + 1;

                // check if position inside this section
                if (position == 0) return TYPE_SECTION_HEADER;
                if (position < size) return type + adapter.getItemViewType(position - 1);

                // otherwise jump into next section
                position -= size;
                type += adapter.getViewTypeCount();
            }
        return -1;
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		int sectionnum = 0;
        for (Object section : this.section_item.keySet())
            {
                Adapter adapter = section_item.get(section);
                int size = adapter.getCount() + 1;

                // check if position inside this section
                if (position == 0) 
                		return header.getView(sectionnum, convertView, parent);
                
                if (position < size) 
                		return adapter.getView(position - 1, convertView, parent);

                // otherwise jump into next section
                position -= size;
                sectionnum++;
            }
        return null;
	}
	  public boolean areAllItemsSelectable()
      {
              return false;
      }

	@Override
	public boolean isEnabled(int position) 
	{
		// TODO Auto-generated method stub
		return (getItemViewType(position) != TYPE_SECTION_HEADER);
	}

}
